<script>
// const now = Date.now() // 时间戳
// console.log(now)
// for(let i=0; i<10**9; i++) {}
// console.log(Date.now(), Date.now() - now)

// const now = Date.now() // 时间戳
// console.log(now) // a
// setTimeout(() => {
//   console.log('延时函数开始') // b
//   for(let i=0; i<10**9; i++) {}
//   console.log('延时函数结束') // c
// }, 0)
// console.log(Date.now(), Date.now() - now) // d

// {
//   const now = Date.now() // 时间戳
//   console.log('2', now) // e
//   for(let i=0; i<10**9; i++) {}
//   console.log('2', Date.now(), Date.now() - now) // f
// }

// const p = new Promise((resolve, reject) => {
//   if (Math.random() > 0.5) {
//     console.log('成功')
//     resolve('成功！') // 结果
//   }else {
//     console.log('失败')
//     reject('失败！！！') // 原因
//   }
// })

// console.log(3)
// const p = new Promise((resolve, reject) => {
//   // 同步执行
//   console.log(1)
//   resolve('a')
//   reject('b')
//   console.log(2)
// })
// console.log(4)

// const p = new Promise((resolve, reject) => {
//   // setTimeout(
//   //   () => {
//       if (Math.random() > 0.0) {
//         resolve('找到水')
//       } else {
//         reject('没有找到水。。。')
//       }
//   //   }, 0
//   // )
// })
// const p2 = p.then(
//   (v) => {
//     console.log('然后，成功：', v)
//     console.log('测量水量')
//     return 80
//   }, // fulfilled
//   (e) => {console.log('然后，失败：', e)}  // rejected
// )
// console.log(p2)

// let p3 = p2.then((v) => {
//   if (v < 90) {
//     throw ('太少了') // throw 是错误版本的return
//   } else {
//     return ('足够的水源')
//   }
//   // return undefined
// })

// let p4 = p3.then(() => {
//   return 'OK'
// })

// let p5 = p4.then(undefined, (msg) => {
//   console.log(msg, '其实80水也够') // 错误被解决了，所以下一步成功
//   return true
// })

function delay(ms, cb) {
  setTimeout(cb, ms)
}
// delay(1000, function() {
//   console.log('hello')
// })
delay(1000, function() {
  console.log('hello')
  delay(2000, function() {
    console.log('world')
    delay(500, function() {
      console.log('今天')
      delay(500, function() {
        console.log('的')
        delay(500, function() {
          console.log('天气')
          delay(500, function() {
            console.log('不错')
            delay(500, function() {
              console.log('啊')
            })
          })
        })
      })
    })
  })
})
// hello
// world
// 今天
// 的
// 天气
// 不错
// 啊
// promise函数：返回promise对象的函数
function delay2(ms) {
  return new Promise(function(resolve) {
    setTimeout(() => resolve(), ms)
  })
}
delay2(1000)
  .then(() => {
    console.log('hello2')
    return delay2(2000)
  })
  .then(() => {
    console.log('world2')
    return delay2(500)
  })
  .then(() => {
    console.log('今天')
    return delay2(500)
  })
  .then(() => {
    console.log('的')
    return delay2(500)
  })
  .then(() => {
    console.log('天气')
    return delay2(500)
  })
  .then(() => {
    console.log('不错')
    return delay2(500)
  })
  .then(() => {
    console.log('啊')
    // return delay2(500)
  })


// promise.catch((e) => { ... })
// 等同 promise.then(undefined, (e) => { ... })


</script>